package com.eltsistemas.dao;

import java.sql.Date;
import java.util.Calendar;

import org.hibernate.Query;
import org.hibernate.Session;

public class FeriasDao {
	
	private Session session;
	
	public FeriasDao(Session session)
	{
		this.session=session;
	}

	public Long verificaPeriodo(Calendar dtAquisitivoInicio, Calendar dtAquisitivoFim, 
								Calendar dtPeriodoInicio, Calendar dtPeriodoFim, Long id_Funcionario)
	{
		Date dtAquisitivoInicial = new Date(dtAquisitivoInicio.getTimeInMillis());
		Date dtAquisitivoFinal = new Date(dtAquisitivoFim.getTimeInMillis());
		Date dtPeriodoInicial = new Date(dtPeriodoInicio.getTimeInMillis());
		Date dtPeriodoFinal = new Date(dtPeriodoFim.getTimeInMillis());
		
	
		StringBuilder consulta = new StringBuilder();
		consulta.append("SELECT MAX(f.id) from Ferias as f WHERE ");
		consulta.append("(f.periodo_AquisitivoInicial >= :dtAquisitivoInicial or f.periodo_AquisitivoInicial >= :dtAquisitivoFinal or ");
		consulta.append(" f.periodo_AquisitivoFinal >= :dtAquisitivoInicial or f.periodo_AquisitivoFinal >= :dtAquisitivoFinal) and ");
		consulta.append("(f.periodo_RepousoInicial >= :dtPeriodoInicial or f.periodo_RepousoInicial >= :dtPeriodoFinal or ");
		consulta.append(" f.periodo_RepousoFinal >= :dtPeriodoFinal or f.periodo_RepousoFinal >= :dtPeriodoFinal) and ");
		consulta.append("id_funcionario=:id_Funcionario and status_Atual= :status");
		
		Query query = session.createQuery(consulta.toString());
		query.setDate("dtAquisitivoInicial", dtAquisitivoInicial);
		query.setDate("dtAquisitivoFinal", dtAquisitivoFinal);
		query.setDate("dtPeriodoInicial", dtPeriodoInicial);
		query.setDate("dtPeriodoFinal", dtPeriodoFinal);
		query.setLong("id_Funcionario", id_Funcionario);
		query.setBoolean("status", true);
		
		return (Long) query.uniqueResult();
	}
	
	public Long verificaSeTemItem(Long id_Funcionario)
	{
		StringBuilder consulta = new StringBuilder();
		consulta.append("SELECT COUNT(*) from Ferias as f WHERE ");
		consulta.append("f.funcionario.id= :id_Funcionario");
		
		Query query =this.session.createQuery(consulta.toString());
		query.setLong("id_Funcionario", id_Funcionario);
		
		Long qtd = (Long) query.uniqueResult();
		
		return qtd;
	}
	
	public Long verifica_IdMax(Long id_Funcionario)
	{
		StringBuilder consulta = new StringBuilder();
		consulta.append("SELECT MAX(f.id) from Ferias as f WHERE ");
		consulta.append("f.funcionario.id= :id_Funcionario");
		
		Query query =this.session.createQuery(consulta.toString());
		query.setLong("id_Funcionario", id_Funcionario);
		
		Long qtd = (Long) query.uniqueResult();
		
		return qtd;
	}
	
	public Long verificaVigente(Long id_Funcionario, boolean status)
	{
		StringBuilder consulta = new StringBuilder();
		consulta.append("SELECT MAX(f.id) from Ferias as f WHERE ");
		consulta.append("id_funcionario=:id_Funcionario and status_Atual=:status");
		
		Query query = session.createQuery(consulta.toString());
		query.setLong("id_Funcionario", id_Funcionario);
		query.setBoolean("status", status);
		
		Long id_AtualFerias = (Long) query.uniqueResult();
		
		return id_AtualFerias;
	}
	
}
